package main

import (
	"fmt"
	"strconv"
)

/*
二进制加法
给定两个 01 字符串 a 和 b ，请计算它们的和，并以二进制字符串的形式输出。
输入为 非空 字符串且只包含数字 1 和 0。

示例 1:
输入: a = "11", b = "10"
输出: "101"

示例 2:
输入: a = "1010", b = "1011"
输出: "10101"
*/

func addBinary(a string, b string) string {
	ans := ""
	carry := 0
	lA, lB := len(a), len(b)
	n := max(lA, lB)
	for i := 0; i < n; i++ {
		if i < lA {
			carry += int(a[lA-i-1] - '0')
		}
		if i < lB {
			carry += int(a[lB-i-1] - '0')
		}
		ans = strconv.Itoa(carry%2) + ans
		carry /= 2
	}
	if carry > 0 {
		ans = "1" + ans
	}
	return ans
}

func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}

func main() {
	a := "1010"
	b := "1011"
	fmt.Println(addBinary(a, b))
}
